package redtankface;

import robocode.Robot;

/**
 * TankTask
 */
abstract public class TankTask {
	abstract public long getRating();

	abstract protected void p_doTask();

	/**
	 * Время последнего выполнения задачи.
	 * СТАТИЧЕСКОЕ. То есть если есть несколько операций с разными параметрами,
	 * то оно задается для всех подобных операций насквозь.
	 */
	private static volatile long mLastDo = 0;

	public void doTask() {
		mLastDo = mRobot.getTime();
		p_doTask();
	}

	public TankTask(RedTankFace aRobot) {
		mRobot = aRobot;
	}

	public Robot getRobot() {
		return mRobot;
	}

	/**
	 * Возвращает, сколько времени прошло с момента последнего выполнения задачи.
	 */
	public long getTimeFromLastUse() {
		return mRobot.getTime() - mLastDo;
	}

	protected final RedTankFace mRobot;
}
